package com.king.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.king.dao.UserDao;
import com.king.pojo.User;
import com.king.service.UserService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * (User)表服务实现类
 *
 * @author makejava
 * @since 2020-01-03 20:35:38
 */
@Service("userService")
public class UserServiceImpl implements UserService {

    private static final Logger LOGGER= LogManager.getLogger(UserServiceImpl.class);

    @Autowired
    private UserDao userDao;

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public User queryById(Integer id) {
        return userDao.queryById(id);
    }

    @Override
    public User queryByUsername(String username) {
        return userDao.queryByUsername(username);
    }

    /**
     * 登录
     *
     * @param username
     * @param password
     * @return 实例对象
     */
    @Override
    public User login(String username, String password) {

        password = new Md5Hash(password,username,1024).toString();

        User user = userDao.login(username, password);

        if (user != null && user.getId()!=0){
            return user;
        }
        return null;
    }


    /**
     * 查询多条数据
     *
     * @param page     页码
     * @param pageSize 页大小
     * @param user     实体
     * @return PageInfo<User> 分页数据集合
     */
    @Override
    public PageInfo<User> queryAll(int page, int pageSize, User user) {
        /*拦截分页信息*/
        PageHelper.startPage(page, pageSize);

        List<User> userList = userDao.queryAll(user);

        return new PageInfo<>(userList);
    }

    /**
     * 新增数据
     *
     * @param user 实例对象
     * @return 实例对象
     */
    @Override
    public User insert(User user) {
        String password = user.getPassword();
        //使用MD5密码加密
        password = new Md5Hash(password,user.getUsername(),1024).toString();

        user.setPassword(password);
        LOGGER.info("++++++++++++++++"+user.getUsername());

        User byUsername = userDao.queryByUsername(user.getUsername());
        //判断数据库中是否存在此用户，不存在，在添加用户信息
        if (byUsername == null){

            int i = userDao.insert(user);
            //根据返回的响应行数判断是否数据是否插入成功
            if (i > 0){
                //获取插入数据的新id
                Integer id = user.getId();

                LOGGER.info(userDao.queryById(id));
                //返回插入数据信息
                return userDao.queryById(id);
            }
        }
        return null;
    }

    /**
     * 修改数据
     *
     * @param user 实例对象
     * @return 实例对象
     */
    @Override
    public User update(User user) {
        userDao.update(user);
        return queryById(user.getId());
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer id) {
        return userDao.deleteById(id) > 0;
    }
}